#ifndef COMMANDFACTORY_H_
#define COMMANDFACTORY_H_

#include "../Point3.h"
#include "../Direction.h"
#include "../../boostPtrNames.h"

#include <vector>

namespace OOInterface {

/**
 *This CommandFactory is intended to encapsulate the family of commands that can be created and used within the AI Interface.
 *
 */
class CommandFactory
{
public:
	CommandFactory(){};
	virtual ~CommandFactory(){};

	virtual ConstCommandPtr createAttackCommand( ConstUnitPtr attackee );

	virtual ConstCommandPtr createBuildCommand( ConstUnitPtr building, const Point3f& location, const Direction& facing = NULL);

	virtual ConstCommandPtr createBuildUnitCommand( ConstUnitPtr unit );

	virtual ConstCommandPtr createCaptureCommand( ConstUnitPtr unit );

	virtual ConstCommandPtr createGuardCommand( ConstUnitPtr unit );

	virtual ConstCommandPtr createLoadCommand( ConstUnitPtr unit );

	virtual ConstCommandPtr createUnloadCommand( const Point3f& location );

	virtual ConstCommandPtr createReclaimCommand( ConstUnitPtr unit );

	virtual ConstCommandPtr createRepairCommand( ConstUnitPtr unit );

	virtual ConstCommandPtr createMoveCommand( const Point3f& location );

	virtual ConstCommandPtr createPatrolCommand( const Point3f& location );

	virtual ConstCommandPtr createQueuedCommand( ConstCommandPtr command );

	virtual ConstCommandPtr createStopCommand();

};

}

#endif /*COMMANDFACTORY_H_*/
